动态应用

您所在的位置:网站首页 python app框架 动态应用

动态应用

2023-04-07 15:06| 来源: 网络整理| 查看: 265

还是目前中文文档没有的内容,原文:Dynamic Applications | Sanic Framework。

我们优化了通过命令行运行 Sanic 应用的工作。如果你还不了解的话,最好在读这篇文章前去看一下 运行 Sanic 以获取一些详细的信息。

可以指定全局变量来启动应用:

$ sanic path.to.server:app

对应的 server.py 的代码为:

app = Sanic("TestApp") @app.get("/") async def handler(request: Request): return json({"foo": "bar"})

我们也可以指定某返回 Sanic 实例的工厂函数来启动:

sanic path.to.server:create_app --factory

对应的 server.py 的代码为:

# server.py def create_app(): app = Sanic("TestApp") @app.get("/") async def handler(request: Request): return json({"foo": "bar"}) return app

但有些时候,在更复杂的应用中,这些功能显得捉襟见肘:

在 22.9 的版本中,Sanic 添加了负责在各个工作进程中创建一个应用程序 AppLoader ,如果你需要更加「动态」的运行体验,那可以用一下它。

我们可以将一个能够返回 Sanic 实例的工厂函数给 AppLoader 。AppLoader 可以和更底层的运行应用的 API 一起使用。

import sys from functools import partial from sanic import Request, Sanic, json from sanic.worker.loader import AppLoader def attach_endpoints(app: Sanic): @app.get("/") async def handler(request: Request): return json({"app_name": request.app.name}) def create_app(app_name: str) -> Sanic: app = Sanic(app_name) attach_endpoints(app) return app if __name__ == "__main__": app_name = sys.argv[-1] loader = AppLoader(factory=partial(create_app, app_name)) app = loader.load() app.prepare(port=9999, dev=True) Sanic.serve(primary=app, app_loader=loader)

我们就只需要简单的:

python path/to/server.py ARealManPlaysBasketballWell

即可。

在这个例子中,AppLoader 与 factory 传入的可用于在不同进程中创建同一应用的拷贝的函数一起被创建。然后你需要显式地使用 Sanic.serve ,这样你的 AppLoader 就不会被 app.run 中自动生成的应用替换。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3